package com.beidu.lottery.call.dao;

import com.beidu.lottery.call.entity.PortalActivityRule;
import com.beidu.lottery.call.entity.query.LotteryNumQuery;
import org.apache.ibatis.annotations.Param;

/**
 * <p>
 * 用户数据 Mapper 接口
 * </p>
 *
 * @author 北渡
 * @since 2023-08-23
 */
public interface UserDataMapper {

    /**
     * 查询报名活动剩余中奖名额, 计算方式: 名额-参与次数
     *
     * @param tenantCode 租户编码
     * @param rule       活动规则
     * @author 北渡
     */
    Integer queryRegRemainingQuota(@Param("tenantCode") String tenantCode, @Param("rule") PortalActivityRule rule);

    /**
     * 查询用户剩余投票次数, 计算方式: 限额-参与次数
     * <p>
     * 参与次数根据限额类型, 查询当日或者总数
     *
     * @param tenantCode 租户编码
     * @param uid        用户id
     * @param rule       活动规则
     * @author 北渡
     */
    Integer queryVoteRemainingTimes(@Param("tenantCode") String tenantCode, @Param("uid") String uid, @Param("rule") PortalActivityRule rule);

    /**
     * 限额-参与次数+助力次数(邀请次数*规则因数)
     * <p>
     * 参与次数根据限额类型, 查询当日或者总数
     *
     * @param tenantCode 租户编码
     * @param uid        用户id
     * @param rule       活动规则
     * @author 北渡
     */
    Integer queryLotteryRemainingTimes(@Param("tenantCode") String tenantCode, @Param("uid") String uid, @Param("rule") PortalActivityRule rule);

    /**
     * 查询抽奖活动剩余中奖名额, 计算方式: 中奖次数阈值-订单数
     *
     * @param tenantCode 租户编码
     * @param rule       活动规则
     * @author 北渡
     */
    Integer queryLotteryRemainingQuota(@Param("tenantCode") String tenantCode, @Param("rule") PortalActivityRule rule);

    /**
     * 查询用户指定日期内抽奖次数
     *
     * @param query 查询参数
     */
    Integer queryLotteryNum(LotteryNumQuery query);
}
